package com.meituan.sdk.model.pms.reservation.addOrder;

import com.meituan.sdk.annotations.ApiMeta;
import java.util.List;
import com.google.gson.reflect.TypeToken;
import javax.validation.constraints.NotBlank;
import java.lang.reflect.Type;
import com.meituan.sdk.internal.utils.JsonUtil;
import com.google.gson.annotations.SerializedName;
import javax.validation.constraints.NotNull;
import com.meituan.sdk.MeituanResponse;
import com.meituan.sdk.MeituanRequest;
import javax.validation.constraints.NotEmpty;

/**
* 新增预订单
* This file was automatically generated.
*/
@ApiMeta(
    path = "/pms/reservation/addOrder",
    businessId = 57,
    apiVersion = "10038",
    apiName = "add_order",
    needAuth = true
)
public class AddOrderRequest implements MeituanRequest<AddOrderResponse> {
    /**
    * <p data-diff-id="ct-diff-id-0b18d951-9105-42e4-ae95-e75defa86af1">酒店ID</p>
    */
    @NotNull(message = "hotelId不能为空")
    @SerializedName("hotelId")
    private Long hotelId;
    /**
    * <p data-diff-id="ct-diff-id-638830bf-20de-4df1-bc53-e2c0232c4338">订单编号</p>
    */
    @SerializedName("orderSn")
    private String orderSn;
    /**
    * <p data-diff-id="ct-diff-id-6c383a4b-f3d8-4cbe-ae76-76b4090ec171">渠道订单号</p>
    */
    @SerializedName("channelOrderSn")
    private String channelOrderSn;
    /**
    * <p data-diff-id="ct-diff-id-9e900787-0647-4aa8-909b-b689b9a237b6">订房计划</p>
    */
    @NotEmpty(message = "roomPlans不能为空")
    @SerializedName("roomPlans")
    private List<RoomPlansSub> roomPlans;
    /**
    * <p data-diff-id="ct-diff-id-8f05bcdd-4ca2-412c-9d91-3607a26772ac">担保类型编码。详见PrePaymentType字典。</p>
    */
    @SerializedName("prePaymentType")
    private String prePaymentType;
    /**
    * <p data-diff-id="ct-diff-id-427b8df4-07a0-46b8-befa-7e6af7e28631">备注</p>
    */
    @SerializedName("memo")
    private String memo;
    /**
    * <p data-diff-id="ct-diff-id-044d869d-1b15-45d4-af80-8302d9b7d54d">渠道订单备注</p>
    */
    @SerializedName("channelMemo")
    private String channelMemo;
    /**
    * <p data-diff-id="ct-diff-id-c6de50c2-643f-411a-8784-d098cb1988e1">入住类型，详见CheckinType字典</p>
    */
    @NotBlank(message = "checkinType不能为空")
    @SerializedName("checkinType")
    private String checkinType;
    /**
    * <p data-diff-id="ct-diff-id-6de97c8e-c3dc-4512-b948-a2f30dfa27e4">预抵时间，格式yyyy-MM-dd HH:mm:ss</p>
    */
    @NotBlank(message = "estimatedArriveTime不能为空")
    @SerializedName("estimatedArriveTime")
    private String estimatedArriveTime;
    /**
    * <p data-diff-id="ct-diff-id-353ea077-de39-48a5-a278-48e790895c79">预离时间，格式yyyy-MM-dd HH:mm:ss</p>
    */
    @NotBlank(message = "estimatedDepartureTime不能为空")
    @SerializedName("estimatedDepartureTime")
    private String estimatedDepartureTime;
    /**
    * <p data-diff-id="ct-diff-id-bda6d0c5-3d57-4fe3-8f8b-b90e4a2cc709">保留时间，格式yyyy-MM-dd HH:mm:ss</p>
    */
    @SerializedName("expireKeepTime")
    private String expireKeepTime;
    /**
    * <p data-diff-id="ct-diff-id-d767a960-48b0-428e-8b56-a2fc3721eb4e">联系人信息</p>
    */
    @NotEmpty(message = "liaisons不能为空")
    @SerializedName("liaisons")
    private List<LiaisonsSub> liaisons;
    /**
    * <p data-diff-id="ct-diff-id-e8a3ec89-6e9f-4d2d-a4ca-2c1d4888c0a4">会员ID，会员预订时填写</p>
    */
    @SerializedName("memberId")
    private Long memberId;
    /**
    * <p data-diff-id="ct-diff-id-0abe0582-095f-4abe-80b5-8100da485459">协议公司/中介ID，中介和协议公司预订时填写</p>
    */
    @SerializedName("contractId")
    private Long contractId;
    /**
    * <p data-diff-id="ct-diff-id-f29d4f18-b679-44de-9cb7-764ab8cc2404">是否锁房</p>
    */
    @SerializedName("locked")
    private Boolean locked;

    public Long getHotelId() {
        return hotelId;
    }
    public void setHotelId(Long hotelId) {
        this.hotelId = hotelId;
    }
    public String getOrderSn() {
        return orderSn;
    }
    public void setOrderSn(String orderSn) {
        this.orderSn = orderSn;
    }
    public String getChannelOrderSn() {
        return channelOrderSn;
    }
    public void setChannelOrderSn(String channelOrderSn) {
        this.channelOrderSn = channelOrderSn;
    }
    public List<RoomPlansSub> getRoomPlans() {
        return roomPlans;
    }
    public void setRoomPlans(List<RoomPlansSub> roomPlans) {
        this.roomPlans = roomPlans;
    }
    public String getPrePaymentType() {
        return prePaymentType;
    }
    public void setPrePaymentType(String prePaymentType) {
        this.prePaymentType = prePaymentType;
    }
    public String getMemo() {
        return memo;
    }
    public void setMemo(String memo) {
        this.memo = memo;
    }
    public String getChannelMemo() {
        return channelMemo;
    }
    public void setChannelMemo(String channelMemo) {
        this.channelMemo = channelMemo;
    }
    public String getCheckinType() {
        return checkinType;
    }
    public void setCheckinType(String checkinType) {
        this.checkinType = checkinType;
    }
    public String getEstimatedArriveTime() {
        return estimatedArriveTime;
    }
    public void setEstimatedArriveTime(String estimatedArriveTime) {
        this.estimatedArriveTime = estimatedArriveTime;
    }
    public String getEstimatedDepartureTime() {
        return estimatedDepartureTime;
    }
    public void setEstimatedDepartureTime(String estimatedDepartureTime) {
        this.estimatedDepartureTime = estimatedDepartureTime;
    }
    public String getExpireKeepTime() {
        return expireKeepTime;
    }
    public void setExpireKeepTime(String expireKeepTime) {
        this.expireKeepTime = expireKeepTime;
    }
    public List<LiaisonsSub> getLiaisons() {
        return liaisons;
    }
    public void setLiaisons(List<LiaisonsSub> liaisons) {
        this.liaisons = liaisons;
    }
    public Long getMemberId() {
        return memberId;
    }
    public void setMemberId(Long memberId) {
        this.memberId = memberId;
    }
    public Long getContractId() {
        return contractId;
    }
    public void setContractId(Long contractId) {
        this.contractId = contractId;
    }
    public Boolean getLocked() {
        return locked;
    }
    public void setLocked(Boolean locked) {
        this.locked = locked;
    }


    @Override
    public MeituanResponse<AddOrderResponse> deserializeResponse(String response) {
        Type type = new TypeToken<MeituanResponse<AddOrderResponse>>(){}.getType();
        return JsonUtil.fromJson(response, type);
    }
    @Override
    public String serializeToJson() {
        return JsonUtil.toJson(this);
    }


    @Override
    public String toString() {
        return "AddOrderRequest{" + "hotelId=" + hotelId + "," + "orderSn=" + orderSn + "," + "channelOrderSn=" + channelOrderSn + "," + "roomPlans=" + roomPlans + "," + "prePaymentType=" + prePaymentType + "," + "memo=" + memo + "," + "channelMemo=" + channelMemo + "," + "checkinType=" + checkinType + "," + "estimatedArriveTime=" + estimatedArriveTime + "," + "estimatedDepartureTime=" + estimatedDepartureTime + "," + "expireKeepTime=" + expireKeepTime + "," + "liaisons=" + liaisons + "," + "memberId=" + memberId + "," + "contractId=" + contractId + "," + "locked=" + locked + "}";
    }
}
